package io.github.echarts.render;

import java.awt.Color;
import java.awt.Font;
import java.awt.geom.Path2D;

/**
 * Interface defining the rendering capabilities.
 * Implementations will handle the actual rendering to different formats.
 * 
 * IMPORTANT: All coordinates in this interface use logical coordinate system
 * with the origin (0,0) at the BOTTOM-LEFT corner.
 * Y-axis increases UPWARD.
 */
public interface GraphicsRenderer {
    /**
     * 开始渲染
     * 
     * @param width 渲染区域宽度
     * @param height 渲染区域高度
     */
    void beginRender(int width, int height);
    
    /**
     * 结束渲染
     * 
     * @return 渲染结果（如SVG字符串）
     */
    String endRender();

    /**
     * 设置当前渲染层级
     *
     * @param layerType 层级类型
     */
    void setCurrentLayer(String layerType);

    /**
     * 获取当前渲染层级
     *
     * @return 当前层级类型
     */
    String getCurrentLayer();

    /**
     * 绘制矩形
     * 注意：坐标系以左下角为原点(0,0)，y轴向上增长
     *
     * @param x 左下角X坐标
     * @param y 左下角Y坐标
     * @param width 宽度
     * @param height 高度
     * @param fill 是否填充
     * @param fillColor 填充颜色
     * @param strokeColor 边框颜色
     */
    void drawRect(int x, int y, int width, int height, boolean fill, String fillColor, String strokeColor);

    /**
     * 绘制填充路径
     * 注意：路径中的坐标应使用左下角为原点(0,0)，y轴向上增长的逻辑坐标系
     *
     * @param path 路径对象
     * @param fillColor 填充颜色
     */
    void fillPath(Path2D path, String fillColor);

    /**
     * 绘制圆形
     * 注意：坐标系以左下角为原点(0,0)，y轴向上增长
     *
     * @param cx 圆心X坐标
     * @param cy 圆心Y坐标
     * @param radius 半径
     * @param fill 是否填充
     * @param fillColor 填充颜色
     * @param strokeColor 边框颜色
     */
    void drawCircle(int cx, int cy, int radius, boolean fill, String fillColor, String strokeColor);

    /**
     * 绘制扇形
     * 注意：坐标系以左下角为原点(0,0)，y轴向上增长
     *
     * @param cx 中心X坐标
     * @param cy 中心Y坐标
     * @param innerRadius 内半径，为0时绘制实心扇形
     * @param outerRadius 外半径
     * @param startAngle 起始角度（弧度）
     * @param endAngle 结束角度（弧度）
     * @param fill 是否填充
     * @param fillColor 填充颜色
     * @param strokeColor 边框颜色
     */
    void drawSector(int cx, int cy, int innerRadius, int outerRadius,
                    double startAngle, double endAngle,
                    boolean fill, String fillColor, String strokeColor);

    /**
     * 绘制专用于网格的线条，直接添加到网格层
     * 注意：坐标系以左下角为原点(0,0)，y轴向上增长
     *
     * @param x1 起点X坐标
     * @param y1 起点Y坐标
     * @param x2 终点X坐标
     * @param y2 终点Y坐标
     * @param color 线条颜色
     * @param width 线条宽度
     * @param type 线条类型（solid, dashed, dotted）
     */
    void drawGridLine(int x1, int y1, int x2, int y2, String color, int width, String type);

    /**
     * 绘制梯形
     * 注意：坐标系以左下角为原点(0,0)，y轴向上增长
     *
     * @param x 中心X坐标
     * @param y 底部Y坐标
     * @param topWidth 顶部宽度
     * @param bottomWidth 底部宽度
     * @param height 高度
     * @param fill 是否填充
     * @param fillColor 填充颜色
     * @param strokeColor 边框颜色
     */
    void drawTrapezoid(int x, int y, int topWidth, int bottomWidth, int height,
                       boolean fill, String fillColor, String strokeColor);
    
    /**
     * 绘制线段
     * 注意：坐标系以左下角为原点(0,0)，y轴向上增长
     *
     * @param x1 起点X坐标
     * @param y1 起点Y坐标
     * @param x2 终点X坐标
     * @param y2 终点Y坐标
     * @param color 线条颜色
     * @param width 线条宽度
     * @param type 线条类型（solid, dashed, dotted）
     */
    void drawLine(int x1, int y1, int x2, int y2, String color, int width, String type);
    
    /**
     * 绘制文本
     * 注意：坐标系以左下角为原点(0,0)，y轴向上增长
     *
     * @param text 文本内容
     * @param x 文本位置X坐标
     * @param y 文本位置Y坐标（文本基线）
     * @param font 字体
     * @param color 颜色
     * @param align 对齐方式（left, center, right）
     */
    void drawText(String text, int x, int y, Font font, String color, String align);
} 